<!DOCTYPE html>
<html lang="zh-CH" >
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="" />
	
	
	
	<title>Unity官方文档翻译之 assetbundle 工作流程 ｜ zansimple</title>
	
    
    
    <meta name="description" content="前言 本篇是主要是关于 assetbundle 从创建到加载再到使用的整个工作流程
正文 AssetBundle 工作流 根据下面的步骤开始学习使用 assetbundle ，更多的其他的详细流程可以在该文档的其他文章中找到
将资源配置到 AssetBundle 按照以下步骤 将资源分配给特定的 AssetBundle
 从 Project 面板里面选择一个你想要分配到 assetbundle 的资源 检查 Inspector 面板 在 Inspector 面板底部，你可以看到可以设置assetbundle 和变量的区域 左侧的下拉菜单可以设置 assetbundle 右侧的下拉菜单设置变量 左侧下拉菜单默认显示 “None” ,点击左侧的下拉菜单，可以看到已经注册过的 assetbundle 的名称选项 点击 &amp;quot; New&amp;hellip; &amp;ldquo;来创建一个新的 Assetbundle 名称 输入你需要 assetbundle 的名称。注意 : AssetBundle 的名称是支持目录结构的，这取决于你输入的名字 如果想要添加子文件夹只需用“/”分割即可（比如：textfile/text1 , textfile/text2 ） 一旦你选择或者创建一个 assetbundle 名称时，接着你就可以在右侧的下拉菜单中重复上述的步骤选择或者创建一个变量名称，变量名称对于AssetBundle 不是必须的 想要看更多关于 AssetBundle 配置和配置策略相关的内容 ，请看[为 AssetBundle 打包准备资产]一节  创建AssetBundles 在 Assets 目录下创建一个 Editor 文件夹，然后创建一个包含以下代码的代码文件放到 Editor 文件夹下 using UnityEditor; public class CreateAssetBundles { [MenuItem(&amp;ldquo;Assets/Build AssetBundles&amp;rdquo;)] static void BuildAllAssetBundles() { string assetBundleDirectory = &amp;ldquo;Assets/AssetBundles&amp;rdquo;; if(!" />
    

    

	
    
    <link rel="shortcut icon" href="https://lenzan.github.io/images/favicon.ico" />

    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/normalize.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/zozo.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/remixicon@2.5.0/fonts/remixicon.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/highlight.css" />

    
    
</head>

<body>
    <div class="main animate__animated animate__fadeInDown">
        <div class="nav_container animated fadeInDown">
    <div class="site_nav" id="site_nav">
        <ul>
            
            <li>
                <a href="/">首页</a>
            </li>
            
            <li>
                <a href="/">unity</a>
            </li>
            
            <li>
                <a href="/">归档</a>
            </li>
            
            <li>
                <a href="/">关于</a>
            </li>
            
        </ul>
    </div>
    <div class="menu_icon">
        <a id="menu_icon"><i class="ri-menu-line"></i></a>
    </div>
</div>
        <div class="header animated fadeInDown">
    <div class="site_title_container">
        <div class="site_title">
            <h1>
                <a href="https://lenzan.github.io/">
                    <span>zansimple</span>
                    <img src="https://lenzan.github.io/images/logo.svg" />
                </a>
            </h1>
        </div>
        <div class="description">
            <p class="sub_title">专注于Unity虚拟现实开发，游戏开发</p>
            <div class="my_socials">
                
                <a href="https://lenzan.github.io/index.xml" type="application/rss+xml" title="rss" target="_blank"><i
                        class="ri-rss-fill"></i></a>
            </div>
        </div>
    </div>
</div>
        <div class="content">
            <div class="post_page">
                <div class="post animate__animated animate__fadeInDown">
                    <div class="post_title post_detail_title">
                        <h2><a href='/posts/assetbundle/assetbundle-workflow/'>Unity官方文档翻译之 assetbundle 工作流程</a></h2>
                        <span class="date">2018.05.20</span>
                    </div>
                    <div class="post_content markdown"><!-- raw HTML omitted -->
<h2 id="前言">前言</h2>
<p>本篇是主要是关于 assetbundle 从创建到加载再到使用的整个工作流程</p>
<h2 id="正文">正文</h2>
<h3 id="assetbundle-工作流">AssetBundle 工作流</h3>
<p>根据下面的步骤开始学习使用 assetbundle ，更多的其他的详细流程可以在该文档的其他文章中找到</p>
<h3 id="将资源配置到-assetbundle">将资源配置到 AssetBundle</h3>
<p>按照以下步骤 将资源分配给特定的 AssetBundle</p>
<ol>
<li>从 Project 面板里面选择一个你想要分配到 assetbundle 的资源</li>
<li>检查 Inspector 面板</li>
<li>在 Inspector 面板底部，你可以看到可以设置assetbundle 和变量的区域</li>
<li>左侧的下拉菜单可以设置 assetbundle 右侧的下拉菜单设置变量</li>
<li>左侧下拉菜单默认显示 “None” ,点击左侧的下拉菜单，可以看到已经注册过的 assetbundle 的名称选项</li>
<li>点击 &quot; New&hellip; &ldquo;来创建一个新的 Assetbundle 名称</li>
<li>输入你需要 assetbundle 的名称。注意 : AssetBundle 的名称是支持目录结构的，这取决于你输入的名字 如果想要添加子文件夹只需用“/”分割即可（比如：textfile/text1 , textfile/text2 ）</li>
<li>一旦你选择或者创建一个 assetbundle 名称时，接着你就可以在右侧的下拉菜单中重复上述的步骤选择或者创建一个变量名称，变量名称对于AssetBundle 不是必须的
想要看更多关于 AssetBundle 配置和配置策略相关的内容 ，请看[为 AssetBundle 打包准备资产]一节</li>
</ol>
<h3 id="创建assetbundles">创建AssetBundles</h3>
<p>在 Assets 目录下创建一个 Editor 文件夹，然后创建一个包含以下代码的代码文件放到 Editor 文件夹下
using UnityEditor;
public class CreateAssetBundles
{
[MenuItem(&ldquo;Assets/Build AssetBundles&rdquo;)]
static void BuildAllAssetBundles()
{
string assetBundleDirectory = &ldquo;Assets/AssetBundles&rdquo;;
if(!Directory.Exists(assetBundleDirectory))
{
Directory.CreateDirectory(assetBundleDirectory);
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
}
这个脚本将会在 &ldquo;Assets&rdquo; 菜单的最底部，创建一个叫 &ldquo;Build AssetBundles&rdquo; 的按钮。当你点击该按钮，就会执行脚本中与之对应的方法。接着，所有被你命名了的资远都会被构建成对应的 AssetBundle ，并放置在你定义的路径下。在本章节中，该路径为：&ldquo;Assets/AssetBundles&rdquo;。</p>
<h3 id="将assetbundle上传到远程仓库">将AssetBundle上传到远程仓库</h3>
<p>这一步对于每个开发者来说都是不同的而不是 Unity 告诉你该如何做。如果你计划将 AssetBundle 部署到远程虚拟主机上，则需要继续学习相关的内容，如果你只是本地开发，并且将 AssetBundle 存储到本地磁盘中，你可以跳过本节内容。</p>
<h3 id="加载assetbundle和资产assets">加载AssetBundle和资产（assets）</h3>
<p>对于想要本地开发的用户来说，你可能对 &ldquo;AssetBundles.LoadFromFile&rdquo; 这个API感兴趣 下面是代码：
public class LoadFromFileExample : MonoBehaviour {
void Start() {
var myLoadedAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, &ldquo;myassetBundle&rdquo;));
if (myLoadedAssetBundle == null) {
Debug.Log(&ldquo;Failed to load AssetBundle!&quot;);
return;
}
var prefab = myLoadedAssetBundle.LoadAsset.<!-- raw HTML omitted -->(&ldquo;MyObject&rdquo;);
Instantiate(prefab);
}
}
LoadFromFile（path） path = assetbundle 存储的路径
如果你的 AssetBundle 存放在远程主机上，你需要下载到你的游戏中，你可能会用到 &ldquo;UnityWebRequest&rdquo; 这个 API 。下面是例子代码
IEnumerator InstantiateObject(){
string url = &ldquo;file:///&rdquo; + Application.dataPath + &ldquo;/AssetBundles/&rdquo; + assetBundleName;<br>
UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(url, 0);
yield return request.Send();
AssetBundle bundle = DownLoadHandlerAssetBundle.GetContent(request);
GameObject cube = bundle.LoadAsset<!-- raw HTML omitted -->(&ldquo;Cube&rdquo;);
GameObject sprite = bundle.LoadAsset<!-- raw HTML omitted -->(&ldquo;Sprite&rdquo;);
Instantiate(cube);
Instantiate(sprite);
}
GetAssetBundle(url , int)
url = 你想下载的 assetbundle 的地址
int = 你想下载的 assetbundle 的版本
在这个例子中 url 指向的是本地路径，但是 url 可以指向任何一个你拥有的 AssetBundle 的地址
UnityWebRequest 里面有个处理 AssetBundle 的方法 DownloadHandlerAssetBundle 这个方法可以从网络中请求中获取到 assetbundle
不管你使用什么样的方法，你现在可以获取到一个 AssetBundle 对象了从这个对象中你可以使用带有泛型T 的方法 LoasAssets&lt; T &gt;(string)string参数为存储在包里面的你要加载的对象的名字，这样就会 return 一个从 AssetBundle 中你正在加载的 Object ，你可以用这个方法在Unity 中加载任何一个对象。比如：你想在场景中创建一个 GameObject ,你只需要调用 Instantiate(gameObjectFromAssetBundle).
想要了解更多关于加载 AssetBundles 的 APIs 的信息，可以看[使用本地 AssetBundle ]一节。</p>
<h2 id="zansimples有话说">zansimples有话说</h2>
<p>没话说，想要知道更多关于 Unity 有关的知识，可以关注一下我的博客，谢谢</p>
</div>
                    <div class="post_footer">
                        
                        <div class="meta">
                            <div class="info">
                                <span class="field tags">
                                    <i class="ri-stack-line"></i>
                                    
                                    <a href="https://lenzan.github.io/tags/Unity3D/">Unity3D</a>
                                    
                                    <a href="https://lenzan.github.io/tags/AssetBundle/">AssetBundle</a>
                                    
                                </span>
                            </div>
                        </div>
                        
                    </div>
                </div>
                
                
            </div>
        </div>
    </div>
    <a id="back_to_top" href="#" class="back_to_top"><span>△</span></a>
    <footer class="footer">
    <div class="powered_by">
        <a href="https://varkai.com">Designed by VarKai,</a>
        <a href="http://www.gohugo.io/">Proudly published with Hugo</a>
    </div>

    <div class="footer_slogan">
        <span></span>
    </div>
</footer>
    <script src="https://lenzan.github.io/js/jquery-3.5.1.min.js"></script>
<link href="https://lenzan.github.io/css/fancybox.min.css" rel="stylesheet">
<script src="https://lenzan.github.io/js/fancybox.min.js"></script>
<script src="https://lenzan.github.io/js/zozo.js"></script>






</body>

</html>